/* @flow */

import { toArray } from '../util/index'

export function initUse(Vue: GlobalAPI) {
  Vue.use = function (plugin) {
    // plugin 可以是一个对象也可以是一个函数
    // this 时Vue那个类
    const installedPlugins = (this._installedPlugins || (this._installedPlugins = []))
    // 若这个插件安装过 那么就不再安装了
    if (installedPlugins.indexOf(plugin) > -1) {
      return this
    }

    // additional parameters
    const args = toArray(arguments, 1)// 把实参集合从索引为1的位置开始 整合成一个数组
    // [1,2,3,4,5]

    args.unshift(this)
    // [Vue,1,2,3,4,5]
    if (typeof plugin.install === 'function') {
      // 若install 是一个函数；那么 会让这个intall执行并且把Vue,1,2,3,4,5传给install
      plugin.install.apply(plugin, args)
    } else if (typeof plugin === 'function') {
      // 若没有intall或者install不是一个函数 那么就让这个执行 并且把Vue,1,2,3,4,5传给这个函数
      plugin.apply(null, args)
    }
    installedPlugins.push(plugin)
    return this
  }

  // Vue.use({}, 1, 2, 3, 4, 5)
}
